<?php
namespace addons\games\controller;

use think\Db;
use think\facade\Request;
use think\helper\Time;
use app\common\model\MpFriends;

class Primg
{

    public $staticPath=ROOT_PATH . DS . 'public' . DS . 'static' . DS;
    public $font = ROOT_PATH . DS . 'public' . DS . 'static'  . DS . 'Kaiti.ttf';

    public $file_root = ROOT_PATH .  'uploads' . DS;
    public function index()
    {
        $openid = input('openid');
        if(!$openid){
            die('null given openid');
        }
        $model = new MpFriends();
        $member=$model->getMemberInfo(['openid' => $openid]);
        if (empty($member)) {
            die('null given member info');
        }
        $headimg = input('headimg');
        $headimg = $member['headimgurl'];
        $user_sex = $member['sex'];
        $nickname = $member['nickname'];
        if(!$nickname){
            $nickname='小可爱';
        }
        if (!$headimg){
            //如果没有传递参数值，则默认本地一张图片
            $headimg = $this->staticPath.'def_headimg.jpg';
        }
        //01.将头像转换成圆形
        //获取头像图(将图像存在本地)解决生成图片需要十几秒的问题
        $head_file = $openid.'.jpg';
        $localPath = $this->file_root . $head_file;
        //如文件不存在,将远程文件下载到本地
        if (!file_exists($localPath)) {
            //获取远程文件，用curl请求
            file_put_contents($localPath, static::getImage($headimg));
        }
        $yuanTu=$this->getYuanTu($localPath);

        //00.开始设置背景图片
        $bg_img = $this->staticPath. 'bg' . DS . 'evo-3-1.jpg';
        //从本地获取背景图片  TODO:随机获取机制
        $background = imagecreatefromjpeg($bg_img);


        //02.昵称处理
        $fcolor = imagecolorallocate($background, 65, 105, 225);//字体颜色
        $f_x=280;
        $f_y=176;
        imagettftext($background, 46, 0, $f_x, $f_y, $fcolor,$this->font, $nickname);

        //03.二维码处理
        $mid=2;
        $url = getHostDomain() . addonUrl('games/say/index', ['mid' => $mid]);
        $qrcodeImg=$this->getQrcodeImg($url);
        //var_dump($qrcodeImg);exit();
        $qr_x = 586;//距离背景左侧的距离
        $qr_y = 1040;//距离背景顶部的距离
        $qr_w = imagesx($qrcodeImg);
        $qr_h = imagesy($qrcodeImg);
        imagecopymerge($background, $qrcodeImg, $qr_x, $qr_y, 0, 0, $qr_w, $qr_h, 100);
        imagedestroy($qrcodeImg);
        // $start_x,$start_y $resource 的位置
        $start_x = 70;//距离背景左侧的距离
        $start_y = 578;//距离背景顶部的距离
        // $src_x,$src_y  copy 后的对象的位置
        $src_x = 0;
        $src_y = 0;
        //$pic_w,$pic_h copy 后的高度和宽度
        //倒数两个参数为 copy 后的图片宽度和高度，可能因为背景图而变化
        $pic_w = 150;
        $pic_h = 150;
        //最后两个参数为原始图片宽度和高度，
        $src_w=$yuanTu['width'];
        $src_h=$yuanTu['height'];
        imagecopyresized($background, $yuanTu['img'], $start_x, $start_y, $src_x, $src_y, $pic_w, $pic_h, $src_w, $src_h);

        header("Content-type: image/png");
        imagepng($background);
        imagedestroy($background);
        exit;
    }

    /**
     * 获取远程图片资源使用curl,比如获取微信头像存到本地curl不到1秒时间，
     * 使用file_get_contents()竟然要花费18秒。
     * @param $url
     * @return mixed
     */
    static function getImage($url)
    {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;

    }

    /**
     * 图片圆角处理，返回原始宽高备用
     * @param $imgUrl
     * @return array
     */
    function getYuanTu($imgUrl)
    {
        if(!$imgUrl){
            die('no img');
        }
        $info = getimagesize($imgUrl);
        $suffix = false;
        if ($mime = $info['mime']) {
            $suffix = explode('/', $mime)[1];
        }
        //$pathInfo = pathinfo($imgUrl);
        switch (strtolower($suffix)) {
            case 'jpg':
            case 'jpeg':
                $imagecreatefromjpeg = 'imagecreatefromjpeg';
                break;
            case 'png':
                $imagecreatefromjpeg = 'imagecreatefrompng';
                break;
            case 'gif':
            default:
                $imagecreatefromjpeg = 'imagecreatefromstring';
                break;
        }

        $resource=$imagecreatefromjpeg($imgUrl);
        $image_width = imagesx($resource);
        $image_height = imagesy($resource);
        $image_width=   $image_height= min($image_width, $image_height);
        $img = imagecreatetruecolor($image_width, $image_width);
        //这一句一定要有
        imagesavealpha($img, true);
        //拾取一个完全透明的颜色,最后一个参数127为全透明
        $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
        imagefill($img, 0, 0, $bg);
        $r   = $image_width / 2; //圆半径
        $y_x = $r; //圆心X坐标
        $y_y = $r; //圆心Y坐标
        for ($x = 0; $x < $image_width; $x++) {
            for ($y = 0; $y < $image_height; $y++) {
                $rgbColor = imagecolorat($resource, $x, $y);
                if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
                    imagesetpixel($img, $x, $y, $rgbColor);
                }
            }
        }

        $imgObj=array();
        $imgObj['img']=$img;
        //imagedestroy($resource);
        //imagedestroy($img);
        $imgObj['width']=$image_width;
        $imgObj['height']=$image_width;

        return $imgObj;
    }


    function getQrcodeImg($url){
        $level = 'L';// 纠错级别：L、M、Q、H
        $size = 6;// 点的大小：1到10,用于手机端4就可以了
        include_once EXTEND_PATH . '/phpqrcode/phpqrcode.php';
        $QRcode = new \QRcode();
        //返回可以调用的图片对象
        $QR = rand(10000,99999).time().".png";
        $QR=ROOT_PATH . DS .'runtime'. DS .$QR;
        $QRcode::png($url, $QR, $level, $size, 1);
        $QR = imagecreatefromstring(file_get_contents($QR));
        return $QR;
        imagedestroy($QR);
    }

}